工作管理員中的listener剛啟動就掛掉, 一直無法連線瘋狂繞圈
在連線到ORACLE時, 客戶端不會直接連線到ORACLE資料庫, 而是會透過Client專用程式, 連線到於Server上的Listener服務。 Listener收到Client的請求之後, 會先驗證請求的有效性, 確認後, Listener再啟動一個process, 將負責處理與客戶的Connection,有了這個connection, cilent才能夠與oracle溝通。
而在一般客戶端的部分, 會使用到的client進行連線, 在client資料夾裡面會有個檔案listener.ora
,裡面可以指定Server中Listener的連線資訊。
如何確定自己所使用的client?
通常若將oracle安裝在自己電腦上進行開發使用, 會附在安裝oracle資料夾裡面, 也可以檢查環境變數, 這個listener.ora通常會在%ORACLE_HOME%/network/admin
的資料夾。
查看listener.ora
裡面, 寫說要連線到localhost
但是這樣儲存檔案之後, 去將lsnr服務關閉後, 就無法重啟lsnr服務
解決:
經查, 發現可將HOST的值設定為本機的裝置名稱
使用CMD查詢本機裝置名稱
將裝置名稱複製到Host後, 儲存檔案
再次至工作管理員, 將lsnr服務手動重啟, 終於可順利啟動。
個人猜想可能是我的環境變數沒設定好, 導致
listener
不認識localhost。
接著可使用DB連線工具, 測試本機連線是否正常
這裡使用SQL Developer
記得主機名稱要改成剛才在listener.ora所修改的HOST名稱
成功連線
listener.ora 的 host 正常來說本來就是要設電腦名稱。
只有作為Client的連線參考所用tnsnames.ora 連本機的話host就可以設 localhost。
Oracle的連線方式不只一種,
你的是 IP:PORT/ID 的方式連線,所以用不上tnsnames.ora。
順便一提,Oracle不要遇到電腦名稱用中文的環境,不管是DB或是Client都建議不要。
國人有些一拿到電腦就替電腦用中文取名,在目前已經算老派的IT都知道盡量不要這麼做因為真的比較有機會遇到不順利運作或安裝的事情在各種應用上。
謝謝大大回復!
第一點的部分, 因之前較沒有設定過這種Listener的經驗, 大部分都是本機資料庫軟體裝好就直接連線, 所以都很直覺的以為, 我listener不是架在本機嗎, 那就打localhost,而出現這樣的誤解。
第二點您的意思是說, 連線server的部分有賴在tnsnames.ora進行server IP、PORT、SID等配置, 但若今天Server架在localhost,加上連線的方式使用IP:PORT/ID, 則tnsnames.ora將不起作用(但仍可在tnsnames.ora裡面加上localhost連線資訊), 這個意思嗎?
第三點的部分, 目前是較少看過電腦名稱會使用中文的部分, 但您的提醒我會特別記住, 謝謝。
我的意思是,
假設你的程式連線方式走tnsnames.ora的話
連線的設定時,只需要設定一個tnsnames.ora定義好的名字,不會需要IP跟port等參數。但這種方法就會依賴Client端環境需要安裝Oracle Client。發布給人使用會稍微麻煩點。
程式直接引用連接驅動,好處是client端發布會簡單點,因為連線都包含在你的程式內了。
當然安裝oracle client的作法不一定只能使用tnsnames的方式,也是能用IP port的方式做連線,只是oracle client的標準安裝就冗長又肥了點。
喔喔, 就是說要馬把連線附在程式(搭配連接驅動的方式), 要馬就是走tnsnames.ora, 但client會需要載oracle client。
第二點, 之前裝oracle也是比較花時間。